import {createSlice} from "@reduxjs/toolkit";
import {loginAPI} from "@/apis/login.jsx";
import {getToken, setToken} from "@/utils/index.jsx";
import {
    getAllUserCountAPI,
    getAllUserListAPI,
    getUserCountByNameAPI,
    getUserCountByTimeAPI,
    getUserInfoAPI,
    getUserListByNameAPI,
    getUserListByTimeAPI
} from "@/apis/user.jsx";


const loginStore=createSlice({
    name:'login',
    // 状态管理的值，最终是取到这个值给其它组件使用，这里约定一个规则，所有的状态值后面加一个"_init"
    initialState:{
        loginToken_init:getToken()||'',
        userInfo_init:{},
        userList_init:[],
        count_init:0
    },
    // 同步方法，就是把action.payload的值赋予状态管理值，相当于vue的action。这个函数里面也可以加上其它的语句
    reducers:{
        setLoginToken(state,action){
            state.loginToken_init=action.payload;
            setToken(action.payload)
        },
        getLoginUserInfo(state,action){
            state.userInfo_init=action.payload
        },
        getUserList(state,action){
            state.userList_init=action.payload
        },
        getUserCount(state,action){
            state.count_init=action.payload
        },
    }
})

//同步请求部分
const {getUserCount,setLoginToken,getLoginUserInfo,getUserList}=loginStore.actions;

// 用户登录异步请求函数
const fetchLogin=(loginObj)=>{
    return async (dispatch)=>{

        const res=  await loginAPI(loginObj)

        dispatch(setLoginToken(res.data))
    }
}
// 获取个人用户异步请求函数
const fetchGetLoginUserInfo=()=>{
    return async (dispatch)=>{
        const res=await getUserInfoAPI();
        dispatch(getLoginUserInfo(res.data))
    }
}
// 获取所有用户列表异步请求函数
const fetchGetUserList=(cur,pageSize)=>{
    return async (dispatch)=>{
        const res=await getAllUserListAPI(cur,pageSize);
        dispatch(getUserList(res.data))
    }
}
// 获取所有用户条数异步请求函数

const fetchGetUserCount=()=>{
    return async (dispatch)=>{
        const res=await getAllUserCountAPI();
        dispatch(getUserCount(res.data))
    }
}

//  获取通过名称搜索的用户异步请求函数
const fetchGetUserListByName=(name,cur,pageSize)=>{
    return async (dispatch)=>{
        const res=await getUserListByNameAPI(name,cur,pageSize)
        dispatch(getUserList(res.data))
    }
}
// 获取通过名称搜索的用户数量异步请求函数
const fetchGetUserCountByName=(name)=>{
    return async (dispatch)=>{
        const res=await getUserCountByNameAPI(name)
        dispatch(getUserCount(res.data))
    }
}

// 通过时间段查询用户的异步请求函数
const fetchGetUserByTime=(startTime,endTime,cur,pageSize)=>{
    return async (dispatch)=>{
        const res=await getUserListByTimeAPI(startTime,endTime,cur,pageSize);
        dispatch(getUserList(res.data));
    }
}

// 通过时间段查询用户数量的异步请求函数
const fetchGetUserCountByTime=(startTime,endTime)=>{
    return async (dispatch)=>{
        const res=await getUserCountByTimeAPI(startTime,endTime);
        dispatch(getUserCount(res.data));
    }
}



// 固定写法
const loginReducer=loginStore.reducer;
// 把异步函数导出去，不用导出同步函数
export {fetchGetUserCount,fetchGetUserList,fetchLogin,fetchGetLoginUserInfo,fetchGetUserListByName,
fetchGetUserCountByName,fetchGetUserByTime,fetchGetUserCountByTime
}
// 导出Reducer
export default loginReducer;